package cn.tedu.generic;
/**
 * @Author 金帮嘉诚
 * @Date 2021-06-18 周五 15:16
 */
/*本类用于测试泛型的优点*/

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 知识点：
 */
public class TestGeneric1 {
    public static void main(String[] args) {
        /*1.泛型是怎么来的？--想要模拟数组的类型检查*/
        String[] a=new String[5];
        //数组 编译时检查数据的类型
//        a[0]=1;
//        a[1]=3.4;
//        a[2]='d';
        a[3]="泡泡";
        a[4]="江江";
        /*2.泛型通常结合着集合一起使用*/
        List list=new ArrayList();
        //没有类型约束，（也没有长度约束）数据类型太自由！！！
        list.add("雷雷");
        list.add(1);
        list.add(8.8);
        list.add('a');
        System.out.println("list = " + list);//

        /*3.引入泛型-主要目的是想通过泛型<?>来约束集合中的数据类型*/
        /*4.泛型的好处：可以把报错的时机提前，在编译期就报错，而不是运行后抛出异常
        * 向集合中添加元素时，会检查元素的类型，不是要求的类型就编译失败*/
        List<String> list2=new ArrayList<String>();//前后尖括号内类型要一致,后面的可以不写
        list2.add("1");
//        list2.add(2);
        list2.add("2");
        list2.add(".8.");
        list2.add("444");
//        list2.add(1);
//        list2.add('c');

        /*5.<type>--type该如何写？
        * 可以根据自己的需求设定类型，但type必须是引用类型不能是基本类型
        * 如可以写Integer不能写int
        * */
        List<Integer> list33=new ArrayList<Integer>();
        list33.add(100);
        list33.add(200);
        list33.add(300);
        System.out.println("list33 = " + list33);


//甚至还能把list作为元素
//        List list1=new ArrayList();
//        list1.add(list);
//        list1.add(list);
//        System.out.println("list1 = " + list1);
//
//        List list3=new ArrayList();
//        list3.add(list1);
//        list3.add(list1);
//        System.out.println("list3 = " + list3);



    }
}
